package com.itheima.demo05;

import java.util.ArrayList;
import java.util.stream.Stream;

public class Demo001 {

    public static void main(String[] args) {

        /*
            Stream<T> filter(Predicate predicate)：用于对流中的数据进行过滤，Predicate接口中的方法boolean test(T t)对给定的参数进行判断，返回一个布尔值
            Stream<T> limit(long maxSize)返回此流中的元素组成的流，截取前指定参数个数的数据
            Stream<T> skip(long n)跳过指定参数个数的数据，返回由该流的剩余元素组成的流
            static <T> Stream<T> concat(Stream a, Stream b)合并a和b两个流为一个流
            Stream<T> distinct()返回由该流的不同元素（根据Object.equals(Object)）组成的流
            Stream<T> sorted()返回由此流的元素组成的流，根据自然顺序排序
            Stream<T> sorted(Comparator comparator)返回由该流的元素组成的流，根据提供的Comparator进行排序
         */


        ArrayList<Integer> arrayList = new ArrayList<>();

        arrayList.add(21);
        arrayList.add(34);
        arrayList.add(43);
        arrayList.add(57);
        arrayList.add(33);
        arrayList.add(39);

        //Stream<T> filter(Predicate predicate)：用于对流中的数据进行过滤
        arrayList.stream().filter(s->s>=39).forEach(s-> System.out.println(s));

        System.out.println("-------------------------------------------------");

        //Stream<T> limit(long maxSize)返回此流中的元素组成的流，截取前指定参数个数的数据
        arrayList.stream().limit(2).forEach(s-> System.out.println(s));

        System.out.println("-------------------------------------------------");

        // Stream<T> skip(long n)跳过指定参数个数的数据，返回由该流的剩余元素组成的流
        arrayList.stream().skip(2).forEach(s -> System.out.println(s));

        System.out.println("-------------------------------------------------");

        //static <T> Stream<T> concat(Stream a, Stream b)合并a和b两个流为一个流
        ArrayList<Integer> arrayList1 = new ArrayList<>();

        arrayList1.add(23);
        arrayList1.add(34);
        arrayList1.add(57);

        Stream<Integer> stream0 = arrayList.stream();
        Stream<Integer> stream1 = arrayList1.stream();

        Stream<Integer> concat = Stream.concat(stream0, stream1);

        //concat.forEach(s-> System.out.println(s));

        System.out.println("-------------------------------------------------");

        //Stream<T> distinct()返回由该流的不同元素
        //Stream<Integer> distinct = concat.distinct();
        //distinct.forEach(s-> System.out.println(s));

        System.out.println("-------------------------------------------------");

        //Stream<T> sorted()返回由此流的元素组成的流，根据自然顺序排序
//        Stream<Integer> sorted = concat.sorted();
//        sorted.forEach(s-> System.out.println(s));

        System.out.println("-------------------------------------------------");

        //Stream<T> sorted(Comparator comparator)返回由该流的元素组成的流，根据提供的Comparator进行排序
        concat.distinct().sorted((a,b)->b-a).forEach(s-> System.out.println(s));

    }
}
